<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html lang="zh" xml:lang="zh" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<head>
<META http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Task Descriptor: 构造实现模型</title>
<meta name="uma.type" content="TaskDescriptor">
<meta name="uma.name" content="structure_implementation_model">
<meta name="uma.presentationName" content="构造实现模型">
<meta name="uma.guid" content="_AS4V0EofEdqrjq4i3fchvA">
<meta name="element_type" content="TaskDescriptor">
<meta name="filetype" content="description">
<meta name="role" content="">
<link rel="StyleSheet" href="./../../css/default.css" type="text/css">
<script src="./../../scripts/ContentPageResource.js" type="text/javascript" language="JavaScript"></script><script src="./../../scripts/ContentPageSection.js" type="text/javascript" language="JavaScript"></script><script src="./../../scripts/ContentPageSubSection.js" type="text/javascript" language="JavaScript"></script><script src="./../../scripts/ActivityTreeTable.js" type="text/javascript" language="JavaScript"></script><script src="./../../scripts/ProcessElementPage.js" type="text/javascript" language="JavaScript"></script><script src="./../../scripts/ContentPageToolbar.js" type="text/javascript" language="JavaScript"></script><script src="./../../scripts/contentPage.js" type="text/javascript" language="JavaScript"></script><script src="./../../scripts/processElementData.js" type="text/javascript" language="JavaScript"></script><script type="text/javascript" language="JavaScript">
					var defaultQueryStr = '?proc={F2AD342D-0F3B-4E19-A351-75ECDCB806F5}&path={F2AD342D-0F3B-4E19-A351-75ECDCB806F5},{4C4FF747-885B-4569-A462-756C8ADD79AB},_AS4V0EofEdqrjq4i3fchvA';
					var backPath = './../../';
					var imgPath = './../../images/';
					var nodeInfo=null;
					contentPage.preload(imgPath, backPath, nodeInfo, defaultQueryStr, true, true, false);
				</script>
</head>
<body>
<div id="breadcrumbs"></div>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr>
<td valign="top">
<div id="page-guid" value="_AS4V0EofEdqrjq4i3fchvA"></div>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tr>
<td class="pageTitle" nowrap="true">Task Descriptor: 构造实现模型</td><td width="100%">
<div align="right" id="contentPageToolbar"></div>
</td><td width="100%" class="expandCollapseLink" align="right"><a name="mainIndex" href="./../../index.htm"></a><script language="JavaScript" type="text/javascript" src="./../../scripts/treebrowser.js"></script></td>
</tr>
</table>
<table width="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td class="pageTitleSeparator"><img src="./../../images/shim.gif" alt="" title="" height="1"></td>
</tr>
</table>
<div class="overview">
<table width="97%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="50"><img src="./../../images/taskdes_lg_dgm32.gif" alt="" title=""></td><td>
<table class="overviewTable" border="0" cellspacing="0" cellpadding="0">
<tr>
<td valign="top">此任务描述了如何根据实现子系统及其内容的分配职责来建立实现元素的结构。</td>
</tr>
<tr>
<td>Based on Method Task: <a href="./../../rup/tasks/structure_implementation_model_E0E0DEF9.html" guid="{35272424-8A0A-4DDD-BA74-C91B80A8D046}">构造实现模型</a></td>
</tr>
</table>
</td>
</tr>
</table>
</div>
<div class="sectionHeading">Relationships</div>
<div class="sectionContent">
<table class="sectionTable" border="0" cellspacing="0" cellpadding="0">
<tr valign="top">
<th class="sectionTableHeading" scope="row">Roles</th><td class="sectionTableCell" width="30%"><span class="sectionTableCellHeading">Main:
								</span>
<ul>
<li>
<a href="./../../rup/capabilitypatterns/rup_software_architect_E4FCFF9F.html" guid="_AS-ccEofEdqrjq4i3fchvA">软件架构师</a>
</li>
</ul>
</td><td class="sectionTableCell" width="30%"><span class="sectionTableCellHeading">Additional:
								</span></td><td class="sectionTableCell"><span class="sectionTableCellHeading">Assisting:
								</span></td>
</tr>
<tr valign="top">
<th class="sectionTableHeading" scope="row">Inputs</th><td class="sectionTableCell" width="30%"><span class="sectionTableCellHeading">Mandatory:
								</span>
<ul>
<li>
<a href="./../../rup/capabilitypatterns/rup_design_model_EF9ADFAF.html" guid="_AS-ccUofEdqrjq4i3fchvA">设计模型</a>
</li>
</ul>
</td><td class="sectionTableCell" width="30%"><span class="sectionTableCellHeading">Optional:
								</span>
<ul>
<li>
<a href="./../../rup/capabilitypatterns/rup_supplementary_specification_DE33F3C5.html" guid="_AS-cckofEdqrjq4i3fchvA">补充规约</a>
</li>
<li>
<a href="./../../rup/capabilitypatterns/rup_deployment_model_470DC98A.html" guid="_AS-cc0ofEdqrjq4i3fchvA">部署模型</a>
</li>
<li>
<a href="./../../rup/capabilitypatterns/rup_implementation_model_2D464D8F.html" guid="_CSFCKxi2Edq_uI8xTPML6g">实现模型</a>
</li>
<li>
<a href="./../../rup/capabilitypatterns/rup_project_specific_guidelines_22A86D7F.html" guid="_CSFCKhi2Edq_uI8xTPML6g">特定于项目的指南</a>
</li>
</ul>
</td><td class="sectionTableCell"><span class="sectionTableCellHeading">External:
								</span>
<ul>
<li>None</li>
</ul>
</td>
</tr>
<tr valign="top">
<th class="sectionTableHeading" scope="row">Outputs</th><td class="sectionTableCell" colspan="3">
<ul>
<li>
<a href="./../../rup/capabilitypatterns/rup_software_architecture_document_A98EE1BE.html" guid="_AS-cdEofEdqrjq4i3fchvA">软件架构文档</a>
</li>
<li>
<a href="./../../rup/capabilitypatterns/rup_implementation_model_2D464D8F.html" guid="_CSFCKxi2Edq_uI8xTPML6g">实现模型</a>
</li>
</ul>
</td>
</tr>
</table>
</div>
<div class="sectionHeading">Steps</div>
<div class="sectionContent">
<table class="sectionTable" border="0" cellspacing="0" cellpadding="0">
<tr>
<td class="sectionTableCell">
<div class="stepHeading"> 建立实现模型结构</div>
<div class="stepContent">
<table class="stepTable" border="0" cellspacing="0" cellpadding="0">
<tr valign="top">
<td><a id="Establish the Implementation Model Structure" name="Establish the Implementation Model Structure"></a>
<div align="left">
    <table border="1" width="100%" cellspacing="0" cellpadding="4" style="border: 1px solid rgb(128,128,128)"     bordercolorlight="#808080" bordercolordark="#808080">
        <tr>
            <td width="5%">
                <b>目的</b>
            </td>
            <td width="95%">
                建立实现模型的结构。&nbsp;
            </td>
        </tr>
    </table><br />
</div>
<p>
    在从“设计空间”向“实现空间”移动的过程中，首先在实现模型中制作设计模型结构的镜像。
</p>
<p>
    设计包将会有相应的实现子系统，这些实现子系统将包含实现相应设计元素所需的一个或多个目录和文件（工件：实现元素）。从设计模型到实现模型的映射可能会随着每个实现子系统分配到架构中的特定层而发生变化。
</p>
<p>
    创建一个图，以代表实现模型结构（请参阅“指南：实现图”）。
</p></td>
</tr>
</table>
</div>
<div class="stepHeading"> 调整实现子系统</div>
<div class="stepContent">
<table class="stepTable" border="0" cellspacing="0" cellpadding="0">
<tr valign="top">
<td><a id="Adjust Subsystems" name="Adjust Subsystems"></a>
<div align="left">
    <table border="1" width="100%" cellspacing="0" cellpadding="4" style="border: 1px solid rgb(128,128,128)"     bordercolorlight="#808080" bordercolordark="#808080">
        <tr>
            <td width="5%">
                <b>目的</b>
            </td>
            <td width="95%">
                调整模型的结构，以反映团队组织或实现语言约束。&nbsp;
            </td>
        </tr>
    </table><br />
</div>
<p>
    通过处理与实现环境相关的较小策略问题，决定子系统的组织是否需要更改。下面是这种策略问题的一些示例。请注意，如果您决定更改实现子系统的组织，就必须决定是否应转而更新设计模型，或者允许设计模型不同于实现模型。
</p>
<ul>
    <li>
        <b>开发团队组织</b>。子系统结构必须允许几个实现者或数个实现团队并行前进，而不会有过多的重叠和不安情况。建议每个实现子系统只归一个团队负责。这意味着您可能会希望将一个子系统分成两个（如果很大），并将两部分分派给两个实现者或两个实现团队来实现，特别是在这两个实现者（或实现团队）有不同的工作版本／发行版周期的情况下。
    </li>
    <li>
        <b>类型的声明</b>。在实现过程中，您可能会意识到，一个子系统需要从另一个子系统导入工作产品，因为类型是在该子系统中声明的。通常，当您使用类型化的编程语言（如 C++、Java 和
        Ada）时，就会发生这种情况。在这种情况下，以及一般情况下，将类型声明抽取到单独的子系统中可能是个好想法。
    </li>
</ul>
<p class="exampleheading">
    示例
</p>
<p class="example">
    您将一些类型声明从<b>子系统 D</b> 抽取到新的子系统类型中，形成了独立于<b>子系统 D</b> 中公用（可视）工作产品的更改的<b>子系统 A</b>。
</p>
<p align="center">
    <img src="./../../rup/tasks/resources/ac_stri1.gif" alt="类型声明子系统抽取图" width="567" height="207" />
</p>
<p class="picturetext">
    类型声明是从子系统 D 中抽取的
</p>
<p>
    .
</p>
<ul>
    <li>
        <b>现有的旧代码和组件系统。</b>您可能需要并入旧代码、可重用组件库或者现成产品。如果这些尚未在设计中建模，则必须添加实现子系统。
    </li>
    <li>
        <b>调整依赖关系。</b>假设子系统 A 和子系统 B 相互之间有导入依赖关系。但是，您可能希望让 B 较少依赖于子系统 A 中的更改。抽取 B 导入的 A 的工作产品，并放到较低层的新实现子系统 A1 中。
    </li>
</ul>
<p align="center">
    <img src="./../../rup/tasks/resources/ac_stri2.gif" alt="工件分组传送图样本" width="403" height="106" />
</p>
<p class="picturetext">
    工作产品从子系统 A 中抽取，并放到新的子系统 A1 中。
</p>
<p>
    现在因为实现子系统不再对设计模型中的包／子系统进行一对一映射，您可以在设计模型中作出相应的更改（如果您已决定使设计模型与实现模型保持高度一致），或者可以跟踪实现和设计模型之间的映射（例如通过可跟踪性或实现依赖关系）。这样的映射是否完成以及如何完成，这是一个应记录在<a class="elementLinkWithType" href="./../../rup/workproducts/rup_project_specific_guidelines_8DC8DA32.html" guid="{E5501201-7EE6-4243-AE91-73880FF76FC1}">Artifact: 特定于项目的指南</a>中的流程决策。
</p></td>
</tr>
</table>
</div>
<div class="stepHeading"> 为每个实现子系统定义导入</div>
<div class="stepContent">
<table class="stepTable" border="0" cellspacing="0" cellpadding="0">
<tr valign="top">
<td><a id="Define Imports for Each Subsystem" name="Define Imports for Each Subsystem"></a>
<div align="left">
    <table border="1" width="100%" cellspacing="0" cellpadding="4" style="border: 1px solid rgb(128,128,128)"     bordercolorlight="#808080" bordercolordark="#808080">
        <tr>
            <td width="5%">
                <b>目的</b>
            </td>
            <td width="95%">
                定义子系统之间的依赖关系。&nbsp;
            </td>
        </tr>
    </table><br />
</div>
<p>
    为每个子系统定义它导入的其他子系统。这可以对整套子系统完成，使同一层中的所有子系统都可以导入更下一层的所有子系统。一般而言，实现模型中的依赖关系将反映设计模型中的依赖关系，例外情况是实现模型的结构的已调整部分（请参阅<a href="#Adjust Subsystems">调整实现子系统</a>）。
</p>
<p>
    在组件图中展示分层的子系统结构。
</p></td>
</tr>
</table>
</div>
<div class="stepHeading"> 决定如何处理可执行程序（以及其他派生对象）</div>
<div class="stepContent">
<table class="stepTable" border="0" cellspacing="0" cellpadding="0">
<tr valign="top">
<td><a id="Decide how to treat executable programs (and other derived objects)" name="Decide how to treat executable programs (and other derived objects)"></a>
<p>
    可执行对象（以及其他派生对象）是将构建流程应用于实现子系统（或多个子系统）或其部件的结果，因此在逻辑上属于实现子系统。但是，软件架构师与配置经理合作时需要决定将应用于实现模型的配置项结构。&nbsp;
</p>
<p>
    为了便于选择和引用（特别是部署的选择和引用），缺省的建议是定义单独的配置项来包含可部署的几组可执行程序（关于哪些可执行程序部署在哪些节点上，这是记录在<a class="elementLink" href="./../../rup/workproducts/rup_deployment_model_57DF1DF5.html" guid="{5981B6BE-2FD1-4984-AA94-2F7428439BA6}">部署模型</a>中的）。因此，在简单的情况下，对于每个实现子系统，可部署的可执行程序都会有一个配置项，并有一个配置项包含用来生成这些对象的来源等等。可将实现子系统看作是由包含这些配置项（可能还有其他配置项，如测试资产）的组合配置项来表示的。
</p>
<p>
    从建模的观点来看，由构建流程生成的可执行程序集合可以表示为一个<a class="elementLinkWithType" href="./../../rup/workproducts/rup_build_BA336272.html" guid="{53728CD9-FA47-4B58-A443-E9F9DC196916}">Artifact: 工作版本</a>（是一个包），它包含在相关联的实现子系统（本身是一个包）中。&nbsp;&nbsp;
</p></td>
</tr>
</table>
</div>
<div class="stepHeading"> 决定如何处理测试资产</div>
<div class="stepContent">
<table class="stepTable" border="0" cellspacing="0" cellpadding="0">
<tr valign="top">
<td><a id="Decide how to treat test assets" name="Decide how to treat test assets"></a>
<div align="left">
    <table border="1" width="100%" cellspacing="0" cellpadding="4" style="border: 1px solid rgb(128,128,128)"     bordercolorlight="#808080" bordercolordark="#808080">
        <tr>
            <td width="5%">
                <b>目的</b>
            </td>
            <td width="95%">
                将测试工作产品添加到实现模型中。&nbsp;
            </td>
        </tr>
    </table><br />
</div>
<p>
    一般而言，测试工作产品和测试子系统在 Neusoft Unified Process
    中的处理与其他开发的软件并没有很大的不同。但是，测试工作产品和子系统通常不是部署的系统的一部分，而且常常不可交付给客户。因此，缺省的建议是让测试资产与测试目标相一致（例如，实现元素用于单元测试、实现子系统用于集成测试、系统用于系统测试），但如果项目存储库组织为一组目录或者目录层次结构，就要把测试资产放在（例如）单独的测试目录中。独特的测试子系统（用于单元测试级以上的测试）应该与其他实现子系统同样处理
    － 作为独特的配置项。
</p>
<p>
    对于建模，一个测试工作产品集合可以表示为一个<a class="elementLinkWithType" href="./../../rup/workproducts/rup_implementation_subsystem_118747E9.html" guid="{0F629848-C19E-49AB-A6C1-C8D6A094898A}">Artifact: 实现子系统</a>（一个包）。对于单元测试，这样的测试子系统正常情况下会包含在相关联的（经测试的）实现子系统中。软件架构师在向配置经理咨询之后，应决定该级别的测试工作产品应与他们测试的实现元素一起配置，还是作为单独的配置项进行配置。对于集成和系统测试，测试子系统可能是测试中的实现子系统的同级。
</p></td>
</tr>
</table>
</div>
<div class="stepHeading"> 更新实现视图</div>
<div class="stepContent">
<table class="stepTable" border="0" cellspacing="0" cellpadding="0">
<tr valign="top">
<td><a key="实现视图（implementation view）" text="更新" name="XE_implementation_view__updating" id="XE_implementation_view__updating" class="index"></a><a id="Update the Implementation View" name="Update the Implementation View"></a>
<div align="left">
    <table border="1" width="100%" cellspacing="0" cellpadding="4" style="border: 1px solid rgb(128,128,128)"     bordercolorlight="#808080" bordercolordark="#808080">
        <tr>
            <td width="5%">
                <b>目的</b>
            </td>
            <td width="95%">
                更新软件架构文档的实现视图。&nbsp;
            </td>
        </tr>
    </table><br />
</div>
<p>
    实现视图在<a class="elementLink" href="./../../rup/workproducts/rup_software_architecture_document_C367485C.html" guid="{6F49641A-ED10-47B5-9E5D-3F90A6BF3006}">软件架构文档</a>中有所描述。该部分包含的组件图显示了各层和实现子系统在各层的分配情况，以及子系统之间的导入依赖关系。
</p></td>
</tr>
</table>
</div>
<div class="stepHeading"> 评估实现模型</div>
<div class="stepContent">
<table class="stepTable" border="0" cellspacing="0" cellpadding="0">
<tr valign="top">
<td><a id="Evaluate the implementation model" name="Evaluate the implementation model"></a>
<p>
    请参阅<a class="elementLinkWithType" href="./../../rup/guidances/checklists/implementation_model_DD65F54E.html" guid="2.400665964241535E-305">Checklist: 实现模型</a>。
</p>&nbsp; <br />
<br /></td>
</tr>
</table>
</div>
</td>
</tr>
</table>
</div>
<div class="sectionHeading">Properties</div>
<div class="sectionContent">
<table class="sectionTable" border="0" cellspacing="0" cellpadding="0">
<tr valign="top">
<th class="sectionTableHeading" scope="row" id="property_Multiple Occurrences" abbr="Multiple Occurrences">Multiple Occurrences</th><td class="sectionTableCell" align="left" headers="property_Multiple Occurrences"><img width="20" height="15" alt="" title="" src="./../../images/indent.gif"></td>
</tr>
<tr valign="top">
<th class="sectionTableHeading" scope="row" id="property_Event Driven" abbr="Event Driven">Event Driven</th><td class="sectionTableCell" align="left" headers="property_Event Driven"><img width="20" height="15" alt="" title="" src="./../../images/indent.gif"></td>
</tr>
<tr valign="top">
<th class="sectionTableHeading" scope="row" id="property_Ongoing" abbr="Ongoing">Ongoing</th><td class="sectionTableCell" align="left" headers="property_Ongoing"><img width="20" height="15" alt="" title="" src="./../../images/indent.gif"></td>
</tr>
<tr valign="top">
<th class="sectionTableHeading" scope="row" id="property_Optional" abbr="Optional">Optional</th><td class="sectionTableCell" align="left" headers="property_Optional"><img width="20" height="15" alt="" title="" src="./../../images/indent.gif"></td>
</tr>
<tr valign="top">
<th class="sectionTableHeading" scope="row" id="property_Planned" abbr="Planned">Planned</th><td class="sectionTableCell" align="left" headers="property_Planned"><img width="20" height="15" alt="" title="" src="./../../images/indent.gif"></td>
</tr>
<tr valign="top">
<th class="sectionTableHeading" scope="row" id="property_Repeatable" abbr="Repeatable">Repeatable</th><td class="sectionTableCell" align="left" headers="property_Repeatable"><img width="20" height="15" alt="" title="" src="./../../images/indent.gif"></td>
</tr>
</table>
</div>
<table class="copyright" border="0" cellspacing="0" cellpadding="0">
<tr>
<td class="copyright">Copyright &copy; 2008 版权所有 东软集团股份有限公司&nbsp; 联系邮箱:<a href="mailto:tcoe@neusoft.com">tcoe@neusoft.com</a></td>
</tr>
</table>
</td>
</tr>
</table>
</body>
<script language="JavaScript" type="text/javascript">
					contentPage.onload();
					contentPage.processPage.fixDescriptorLinks();
				</script>
</html>
